package com.base.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.lang.reflect.Array;
import java.lang.reflect.Type;
import java.util.List;


/**
 * 转化json对象工具类
 */
public class JsonUtils {
    /**
     * object转成json对象
     *
     * @param obj
     * @return
     */
    public static JSONObject tojson(Object obj) {
        if (obj != null || "".equals(obj)) {
            return null;
        } else if (obj instanceof String) {
            return (JSONObject) JSONObject.parse((String) obj);
        } else {
            return (JSONObject) JSON.toJSON(obj);
        }
    }

    /**
     * obj转换成json数组
     *
     * @param obj
     * @return
     */
    public static JSONArray toJsonArray(Object obj) {
        if (obj == null || "".equals(obj)) {
            return null;
        } else {
            return (JSONArray) JSON.toJSON(obj);
        }
    }

    /**
     * 转换成json字符串
     * @param obj
     * @return
     */
    public static String toString(Object obj){
         if(obj!=null){
             if(obj instanceof String){
                 return (String)obj;
             }
             if(obj instanceof List || obj instanceof Array){
                 JSONArray.toJSONString(obj);
             }
             return JSONObject.toJSONString(obj, SerializerFeature.PrettyFormat);
         }
         return null;
    }

    /**
     * 转换成java对象
     * @param s
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T toObject(String s,Class<T> clazz){
        if(s!=null){
            if("".equals(s)){
                try{
                    return (T)clazz.newInstance();
                }catch (InstantiationException e){
                    e.printStackTrace();
                }catch (IllegalAccessException e){
                    e.printStackTrace();
                }
            }
            return (T) JSONObject.parseObject(s,clazz);
        }
        return null;
    }

    /**
     * 将obj转换成指定类型的格式
     * @param obj
     * @param T
     * @param <T>
     * @return
     */
    public static <T> T obj2Class(Object obj,Class<T> T){
        if(obj!=null){
            return JSONObject.parseObject(JSONObject.toJSONString(obj),T);
        }
        return null;
    }

    /**
     * 根据type转换成java对象
     * @param s
     * @param type
     * @param T
     * @param <T>
     * @return
     */
    public static <T> T str2ObjectExt(String s, Type type, Class<T> T){
        return (T)JSON.parseObject(s,type);
    }

    /**
     * json字符串转换成list
     * @param s
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> toList(String s,Class<T> clazz){
        if(s!=null){
            return (List<T>)JSONObject.parseArray(s,clazz);
        }
        return null;
    }

    /**
     * list转换成json
     * @param list
     * @return
     */
    public static String listToString(List list){
        if(list==null){
            return null;
        }
        return JSONArray.toJSONString(list);
    }




}
